/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package vista;

import control.Control;
import java.awt.Color;
import java.awt.Graphics;
import java.util.ArrayList;
import javax.swing.ImageIcon;
import javax.swing.JLabel;
import static modelo.Tablero.casillas;

/**
 *
 * @author alumneDAM
 */
public class PanelTablero extends javax.swing.JPanel {

    private Control control;
    private JLabel imagenDadoFija;
    private int posicionCategoria1;
    private int posicionCategoria2;
    private ArrayList quesitosJugador1;
    private ArrayList quesitosJugador2;

    public PanelTablero(Control control) {
        initComponents();

        this.control = control;

        btn_categoria1.addActionListener(control);
        btn_categoria1.setActionCommand("Categoria1");
        btn_categoria2.addActionListener(control);
        btn_categoria2.setActionCommand("Categoria2");
        btn_categoria1.setVisible(false);
        btn_categoria2.setVisible(false);

        imagenDadoFija = new JLabel();
        imagenDadoMovimiento.addMouseListener(control);

        this.repaint();
    }

    public void dibujarFicha(int posicionJ1, int posicionJ2, Graphics ficha, Graphics ficha2) {
        int x = casillas[posicionJ1].getX();
        int y = casillas[posicionJ1].getY();

        ficha.setColor(Color.BLACK);
        ficha.fillOval(x, y, 10, 10);

        int x2 = casillas[posicionJ2].getX();
        int y2 = casillas[posicionJ2].getY();

        ficha2.setColor(Color.WHITE);
        ficha2.fillOval(x2, y2, 10, 10);
    }

    @Override
    protected void paintComponent(Graphics g) {
        super.paintComponent(g);

        //TABLERO
        ImageIcon imagenFondo = new ImageIcon(getClass().getResource("/imagenes/tablero.png"));
        g.drawImage(imagenFondo.getImage(), 100, 50, imagenFondo.getIconWidth(), imagenFondo.getIconHeight(), null);

        //IMAGENES QUESITOS
        ImageIcon imagenQuesitoVacio = new ImageIcon(getClass().getResource("/imagenes/estrella_vacia.png"));
        ImageIcon imagenQuesitoAmarillo = new ImageIcon(getClass().getResource("/imagenes/estrella_amarilla.png"));
        ImageIcon imagenQuesitoAzul = new ImageIcon(getClass().getResource("/imagenes/estrella_azul.png"));
        ImageIcon imagenQuesitoGris = new ImageIcon(getClass().getResource("/imagenes/estrella_gris.png"));
        ImageIcon imagenQuesitoMarron = new ImageIcon(getClass().getResource("/imagenes/estrella_marron.png"));
        ImageIcon imagenQuesitoNaranja = new ImageIcon(getClass().getResource("/imagenes/estrella_naranja.png"));
        ImageIcon imagenQuesitoRoja = new ImageIcon(getClass().getResource("/imagenes/estrella_roja.png"));
        ImageIcon imagenQuesitoRosa = new ImageIcon(getClass().getResource("/imagenes/estrella_rosa.png"));
        ImageIcon imagenQuesitoVerde = new ImageIcon(getClass().getResource("/imagenes/estrella_verde.png"));

        //QUESITOS JUGADOR LOCAL
        g.drawImage(imagenQuesitoVacio.getImage(), 25, 20, 10, 20, null);
        g.drawImage(imagenQuesitoVacio.getImage(), 35, 20, 10, 20, null);
        g.drawImage(imagenQuesitoVacio.getImage(), 45, 20, 10, 20, null);
        g.drawImage(imagenQuesitoVacio.getImage(), 55, 20, 10, 20, null);
        g.drawImage(imagenQuesitoVacio.getImage(), 65, 20, 10, 20, null);
        g.drawImage(imagenQuesitoVacio.getImage(), 75, 20, 10, 20, null);
        g.drawImage(imagenQuesitoVacio.getImage(), 85, 20, 10, 20, null);
        g.drawImage(imagenQuesitoVacio.getImage(), 95, 20, 10, 20, null);
        for (int i = 0; i < quesitosJugador1.size(); i++) {
            if (quesitosJugador1.get(i).equals("AZUL")) {
                g.drawImage(imagenQuesitoAzul.getImage(), 25, 20, 10, 20, null);
            } else if (quesitosJugador1.get(i).equals("NARANJA")) {
                g.drawImage(imagenQuesitoNaranja.getImage(), 35, 20, 10, 20, null);
            } else if (quesitosJugador1.get(i).equals("GRIS")) {
                g.drawImage(imagenQuesitoGris.getImage(), 45, 20, 10, 20, null);
            } else if (quesitosJugador1.get(i).equals("ROSA")) {
                g.drawImage(imagenQuesitoRosa.getImage(), 55, 20, 10, 20, null);
            } else if (quesitosJugador1.get(i).equals("MARRON")) {
                g.drawImage(imagenQuesitoMarron.getImage(), 65, 20, 10, 20, null);
            } else if (quesitosJugador1.get(i).equals("VERDE")) {
                g.drawImage(imagenQuesitoVerde.getImage(), 75, 20, 10, 20, null);
            } else if (quesitosJugador1.get(i).equals("AMARILLO")) {
                g.drawImage(imagenQuesitoAmarillo.getImage(), 85, 20, 10, 20, null);
            } else if (quesitosJugador1.get(i).equals("ROJO")) {
                g.drawImage(imagenQuesitoRoja.getImage(), 95, 20, 10, 20, null);
            }
        }

        //QUESITOS OPONENTE
        g.drawImage(imagenQuesitoVacio.getImage(), 410, 20, 10, 20, null);
        g.drawImage(imagenQuesitoVacio.getImage(), 420, 20, 10, 20, null);
        g.drawImage(imagenQuesitoVacio.getImage(), 430, 20, 10, 20, null);
        g.drawImage(imagenQuesitoVacio.getImage(), 440, 20, 10, 20, null);
        g.drawImage(imagenQuesitoVacio.getImage(), 450, 20, 10, 20, null);
        g.drawImage(imagenQuesitoVacio.getImage(), 460, 20, 10, 20, null);
        g.drawImage(imagenQuesitoVacio.getImage(), 470, 20, 10, 20, null);
        g.drawImage(imagenQuesitoVacio.getImage(), 480, 20, 10, 20, null);

        for (int i = 0; i < quesitosJugador2.size(); i++) {
            if (quesitosJugador2.get(i).equals("AZUL")) {
                g.drawImage(imagenQuesitoAzul.getImage(), 410, 20, 10, 20, null);
            } else if (quesitosJugador2.get(i).equals("NARANJA")) {
                g.drawImage(imagenQuesitoNaranja.getImage(), 420, 20, 10, 20, null);
            } else if (quesitosJugador2.get(i).equals("GRIS")) {
                g.drawImage(imagenQuesitoGris.getImage(), 430, 20, 10, 20, null);
            } else if (quesitosJugador2.get(i).equals("ROSA")) {
                g.drawImage(imagenQuesitoRosa.getImage(), 440, 20, 10, 20, null);
            } else if (quesitosJugador2.get(i).equals("MARRON")) {
                g.drawImage(imagenQuesitoMarron.getImage(), 450, 20, 10, 20, null);
            } else if (quesitosJugador2.get(i).equals("VERDE")) {
                g.drawImage(imagenQuesitoVerde.getImage(), 460, 20, 10, 20, null);
            } else if (quesitosJugador2.get(i).equals("AMARILLO")) {
                g.drawImage(imagenQuesitoAmarillo.getImage(), 470, 20, 10, 20, null);
            } else if (quesitosJugador2.get(i).equals("ROJO")) {
                g.drawImage(imagenQuesitoRoja.getImage(), 480, 20, 10, 20, null);
            }
        }

        //LINEAS QUESITOS
        g.setColor(Color.BLACK);
        g.drawLine(25, 42, 112, 42);

        g.setColor(Color.BLACK);
        g.drawLine(412, 42, 500, 42);

        //NOMBRES JUGADORES
        this.lbl_jugador1.setText(control.getPartida().getId_jugador1());
        this.lbl_jugador2.setText(control.getPartida().getId_jugador2());

        //FICHAS POSICION JUGADORES
        this.dibujarFicha(this.control.getPartida().getPosicionJ1(), this.control.getPartida().getPosicionJ2(), g, g);
    }

    public void visibilidadBotonesCategorias(boolean b) {
        btn_categoria1.setVisible(b);
        btn_categoria2.setVisible(b);
    }

    /**
     * Método para cargar el tablero segun si le toca al jugador o no y si ha
     * tirado el dado o no. Comprueba el jugador que le toca jugar para mostrar
     * el tablero correspondiente.
     */
    public void cargarTablero() {

        if (control.getPartida().getTurno().getJugadorActivo().equals(control.getJugador().getNickname())) {
            if (control.getPartida().getTurno().getDadoTirado() == 1) {
                if (control.getPartida().getTurno().getJugadorActivo().equals(control.getPartida().getId_jugador1())) {
                    this.calculoCategorias(control.getPartida().getPosicionJ1());
                } else {
                    this.calculoCategorias(control.getPartida().getPosicionJ2());
                }
                this.dadoFijo();
            } else if (control.getPartida().getTurno().getDadoTirado() == 0) {
                this.imagenDadoFija.setVisible(false);
                this.imagenDadoMovimiento.setVisible(true);
                visibilidadBotonesCategorias(false);
            }
        } else {
            this.imagenDadoMovimiento.setVisible(false);
            this.imagenDadoFija.setVisible(false);
            visibilidadBotonesCategorias(false);
        }
        quesitosJugador1 = control.getPersiPartida().recuperarQuesitosJugador(control.getPartida().getId_partida(), control.getPartida().getId_jugador1());
        quesitosJugador2 = control.getPersiPartida().recuperarQuesitosJugador(control.getPartida().getId_partida(), control.getPartida().getId_jugador2());
    }

    public void dadoFijo() {
        this.colocarImagenDadoFija(control.getPartida().getTurno().getNumeroSacado());
        this.imagenDadoFija.setVisible(true);
        this.imagenDadoMovimiento.setVisible(false);
        this.visibilidadBotonesCategorias(true);
        this.mostrarCategoriaBotones(posicionCategoria1, posicionCategoria2);
    }

    public void calculoCategorias(int posicionActual) {
        posicionCategoria1 = posicionActual + control.getPartida().getTurno().getNumeroSacado();
        posicionCategoria2 = posicionActual - control.getPartida().getTurno().getNumeroSacado();

        if (posicionCategoria1 > 55) {
            posicionCategoria1 = posicionCategoria1 - 56;
        } else if (posicionCategoria1 < 0) {
            posicionCategoria1 = 56 + posicionCategoria1;
        }
        if (posicionCategoria2 > 55) {
            posicionCategoria2 = posicionCategoria2 - 56;
        } else if (posicionCategoria2 < 0) {
            posicionCategoria2 = 56 + posicionCategoria2;
        }
    }

    public void mostrarCategoriaBotones(int categoria1, int categoria2) {
        btn_categoria1.setText(control.getTablero().deColorACategoria(categoria1));
        btn_categoria1.setBackground(control.getTablero().colorCategoria(categoria1));
        btn_categoria2.setText(control.getTablero().deColorACategoria(categoria2));
        btn_categoria2.setBackground(control.getTablero().colorCategoria(categoria2));
    }

    public String colocarQuesito(int posicion) {
        String color = "";

        if (control.getTablero().getCasilla(posicion).getColorCasilla() == Color.BLUE) {
            color = "AZUL";
        } else if (control.getTablero().getCasilla(posicion).getColorCasilla() == Color.PINK) {
            color = "ROSA";
        } else if (control.getTablero().getCasilla(posicion).getColorCasilla() == Color.ORANGE) {
            color = "NARANJA";
        } else if (control.getTablero().getCasilla(posicion).getColorCasilla() == Color.GREEN) {
            color = "VERDE";
        } else if (control.getTablero().getCasilla(posicion).getColorCasilla() == Color.RED) {
            color = "ROJO";
        } else if (control.getTablero().getCasilla(posicion).getColorCasilla() == Color.GRAY) {
            color = "GRIS";
        } else if (control.getTablero().getCasilla(posicion).getColorCasilla() == Color.DARK_GRAY) {
            color = "MARRON";
        } else if (control.getTablero().getCasilla(posicion).getColorCasilla() == Color.YELLOW) {
            color = "AMARILLO";
        }
        return color;
    }

    public void colocarImagenDadoFija(int valorDado) {

        this.add(imagenDadoFija);
        imagenDadoFija.setSize(this.imagenDadoMovimiento.getSize());
        this.imagenDadoFija.setLocation(this.imagenDadoMovimiento.getLocation());

        if (valorDado == 1) {
            ImageIcon imagen = new ImageIcon("./src/imagenes/uno.png");
            this.imagenDadoFija.setIcon(new javax.swing.ImageIcon(imagen.getImage()));

        } else if (valorDado == 2) {
            ImageIcon imagen = new ImageIcon("./src/imagenes/dos.png");
            this.imagenDadoFija.setIcon(new javax.swing.ImageIcon(imagen.getImage()));

        } else if (valorDado == 3) {
            ImageIcon imagen = new ImageIcon("./src/imagenes/tres.png");
            this.imagenDadoFija.setIcon(new javax.swing.ImageIcon(imagen.getImage()));

        } else if (valorDado == 4) {
            ImageIcon imagen = new ImageIcon("./src/imagenes/cuatro.png");
            this.imagenDadoFija.setIcon(new javax.swing.ImageIcon(imagen.getImage()));

        } else if (valorDado == 5) {
            ImageIcon imagen = new ImageIcon("./src/imagenes/cinco.png");
            this.imagenDadoFija.setIcon(new javax.swing.ImageIcon(imagen.getImage()));

        } else if (valorDado == 6) {
            ImageIcon imagen = new ImageIcon("./src/imagenes/seis.png");
            this.imagenDadoFija.setIcon(new javax.swing.ImageIcon(imagen.getImage()));
        }
    }

    public int getPosicionCategoria1() {
        return posicionCategoria1;
    }

    public int getPosicionCategoria2() {
        return posicionCategoria2;
    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        btn_categoria1 = new javax.swing.JButton();
        btn_categoria2 = new javax.swing.JButton();
        imagenDadoMovimiento = new javax.swing.JLabel();
        jLabel2 = new javax.swing.JLabel();
        lbl_jugador1 = new javax.swing.JLabel();
        lbl_jugador2 = new javax.swing.JLabel();

        setBackground(new java.awt.Color(0, 255, 204));

        btn_categoria1.setMaximumSize(new java.awt.Dimension(200, 30));
        btn_categoria1.setMinimumSize(new java.awt.Dimension(200, 30));
        btn_categoria1.setPreferredSize(new java.awt.Dimension(200, 30));

        btn_categoria2.setMaximumSize(new java.awt.Dimension(200, 30));
        btn_categoria2.setMinimumSize(new java.awt.Dimension(200, 30));
        btn_categoria2.setPreferredSize(new java.awt.Dimension(200, 30));

        imagenDadoMovimiento.setIcon(new javax.swing.ImageIcon(getClass().getResource("/imagenes/dado-imagen-animada-0021.gif"))); // NOI18N
        imagenDadoMovimiento.setMaximumSize(new java.awt.Dimension(86, 60));
        imagenDadoMovimiento.setMinimumSize(new java.awt.Dimension(86, 60));

        jLabel2.setBackground(new java.awt.Color(204, 0, 0));
        jLabel2.setOpaque(true);

        lbl_jugador1.setBackground(new java.awt.Color(255, 255, 255));
        lbl_jugador1.setText("jugador1");

        lbl_jugador2.setBackground(new java.awt.Color(255, 255, 255));
        lbl_jugador2.setForeground(new java.awt.Color(255, 255, 255));
        lbl_jugador2.setText("jugador2");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(25, 25, 25)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addGroup(javax.swing.GroupLayout.Alignment.LEADING, layout.createSequentialGroup()
                        .addGap(271, 271, 271)
                        .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 20, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addContainerGap(175, Short.MAX_VALUE))
                    .addGroup(layout.createSequentialGroup()
                        .addComponent(lbl_jugador1)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(lbl_jugador2, javax.swing.GroupLayout.PREFERRED_SIZE, 74, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(43, 43, 43))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(17, 17, 17)
                        .addComponent(btn_categoria1, javax.swing.GroupLayout.PREFERRED_SIZE, 185, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                        .addComponent(btn_categoria2, javax.swing.GroupLayout.PREFERRED_SIZE, 185, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(34, 34, 34))))
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(imagenDadoMovimiento, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(196, 196, 196))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addGap(34, 34, 34)
                .addComponent(jLabel2)
                .addGap(8, 8, 8)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lbl_jugador1, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lbl_jugador2, javax.swing.GroupLayout.PREFERRED_SIZE, 25, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(104, 104, 104)
                .addComponent(imagenDadoMovimiento, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 180, Short.MAX_VALUE)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(btn_categoria1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btn_categoria2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(39, 39, 39))
        );
    }// </editor-fold>//GEN-END:initComponents

    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btn_categoria1;
    private javax.swing.JButton btn_categoria2;
    private javax.swing.JLabel imagenDadoMovimiento;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JLabel lbl_jugador1;
    private javax.swing.JLabel lbl_jugador2;
    // End of variables declaration//GEN-END:variables
}
